

import java.util.ArrayList;
import java.util.List;

public class Arret {

	//variables partagée entre les thread Navette
	private List<Navette> navettesPresente;

	//variables partagée entre les thread Navette
	private int placeDispo = 2;


	public Arret(){
		//this.fileDAttenteFestivalier = new ArrayList<Festivalier>();
		//this.fileDAttentenavette = 
		navettesPresente = new ArrayList<Navette>();

	}

	//
	public synchronized void arriveeNavette(Navette navette){
		//s'il n'y a pas de place elle attend
		//System.out.println(Thread.currentThread().getName() +" à l'arret du site");
		while (placeDispo == 0){
			System.out.println(Thread.currentThread().getName() + ": pas de placce pour la navette elle attend");
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			} 
			System.out.println(Thread.currentThread().getName() +": placce libérée pour la navette elle embarque");
		}
		placeDispo --;
		navettesPresente.add(navette);
		System.out.println("Arv navette presente " + navettesPresente.size());

		notifyAll();

	}

	public synchronized void departNavette(Navette navette){

		placeDispo ++;
		navettesPresente.remove(navette);
		System.out.println("Dep navette presente " + navettesPresente.size());
		notify();

	}

	//Permet à un festivalier de prendre une navitte si une est dispo à l'arret
	public synchronized void prendreNavette(Festivalier fest) {

		while(! estprisNavette()){
			try {
				System.out.println(Thread.currentThread().getName() + " en attente d'une navette");
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println(Thread.currentThread().getName() + " a pris la " + navettesPresente.get(0).getName());
	}

	
	
	/**
	 * verifie si effectivement un festivalier a puis prendre une navette
	 * elle n'est pas synchronisée car la methode appelante l'est deja
	 * @return
	 */
	
	public boolean estprisNavette(){
		if(navettesPresente.size() > 0){
			if(navettesPresente.get(0).getNbPlaceDispo() > 0){
				navettesPresente.get(0).prendrePassages(1);
				return true;
			}
			if(navettesPresente.size() > 1){
				if(navettesPresente.get(1).getNbPlaceDispo() > 0){
					navettesPresente.get(1).prendrePassages(1);
					return true;
				}
			}
		}

		return false;
	}


}
